[AppleScript] 最初のスクリプトの解説
最初にやったこと
これまで基本的な文法やサンプルを紹介してきました。
なんとなく AppleScript が分かってきたところで、一番最初に書いたスクリプトの解説をしてみたいと思います。
↓最初のやつ
AppleScript で Safari を開く
スクリプト
set urls to {"https://www.google.co.jp", "http://www.yahoo.co.jp", "https://www.apple.com"} set countOfUrls to count urls tell application "Safari" activate tell window 1 set firstTab to current tab repeat with i from 1 to countOfUrls set URL of document 1 to (item i of urls) if i = countOfUrls then exit repeat set current tab to (make new tab) end repeat set current tab to firstTab end tell end tell
このスクリプトは Safari を開き、以下のホームページをそれぞれのタブで開くというものでした。
- Yahoo
- Apple
解説
1 行目
set urls to {"https://www.google.co.jp", "http://www.yahoo.co.jp", "https://www.apple.com"}
urls という変数に以下の文字列を格納しています。
- "https://www.google.co.jp"
- "http://www.yahoo.co.jp"
- "https://www.apple.com"
複数の値を含んでいるので、urls は List
となります。
2 行目
set countOfUrls to count urls
countOfUrls という変数に urls の要素数を格納しています。
ここでの値は 3 となります。
count
は List や Record の要素数を取得するコマンドです。
count の部分を length of
に書き換えても同じ結果が得られます。
4, 5 行目
tell application "Safari" activate ... end tell
アプリケーション Safari を起動しています。
activate
はアプリを起動、もしくは最前面に表示するコマンドでしたね。
6 行目
tell window 1 ... end tell
Safari の window 1 に対して以降の命令を送信します。
window
は Safari が持つ Class
です。
また window は AppleScript 標準の Class としても定義されています。
Safari の window 定義
window n [see also Standard Suite] : A Safari window. elements contains tabs. properties current tab (tab) : The current tab.
AppleScript 標準の window 定義
window n [inh. item; see also Safari suite] : A window. elements contained by application. properties bounds (rectangle) : The bounding rectangle of the window. closeable (boolean, r/o) : Whether the window has a close box. document (document, r/o) : The document whose contents are being displayed in the window. floating (boolean, r/o) : Whether the window floats. id (integer, r/o) : The unique identifier of the window. index (integer) : The index of the window, ordered front to back. miniaturizable (boolean, r/o) : Whether the window can be miniaturized. miniaturized (boolean) : Whether the window is currently miniaturized. modal (boolean, r/o) : Whether the window is the application's current modal window. name (text) : The full title of the window. resizable (boolean, r/o) : Whether the window can be resized. titled (boolean, r/o) : Whether the window has a title bar. visible (boolean) : Whether the window is currently visible. zoomable (boolean, r/o) : Whether the window can be zoomed. zoomed (boolean) : Whether the window is currently zoomed.
見てさわった感じ、Safari の window は、標準の window を継承しているようでした。
(明示的に書かれているところは発見できず)
Safari の window は tabs
という Element と current tab
という Property が定義されています。
7 行目
set firstTab to current tab
firstTab という変数に現在のタブを格納しています。
current tab
は Safari の window クラスが持つ Property で、その名の通り現在のタブを表します。
中身は tab
で、こいつも Class です。
8 行目
repeat with i from 1 to countOfUrls ... end repeat
ループを実行しています。
これは from の後の数字から to の後の数字まで繰り返しを行う表記でしたね。
countOfUrls の値は 3 なので、1 から 3 までの 3 回
ループを実行することになります。
9 行目
set URL of document 1 to (item i of urls)
ちょっと複雑ですね。
item i of urls
で List 変数 urls の i 番目の要素を取り出しています。
その値(URL の文字列)を document 1
の URL
Property に設定しています。
document は Class、URL は document の Property です。
document は window のアクティブなタブを表します。
こちらも AppleScript 標準のものと Safari 専用のものが存在します。
この行の命令で現在アクティブなタブの URL が設定され、その URL のページが表示されることになります。
10 行目
if i = countOfUrls then exit repeat
ここではループの制御を行っています。
ループ変数 i が countOfUrls と同じ場合、ループを抜けます。
後続の処理を実行したくないためです。
11 行目
set current tab to (make new tab)
タブを新しく作成し、現在のタブに設定しています(アクティブにしています)。
make
は新しいオブジェクトを生成するコマンドです。
make new <Class>
で Class のオブジェクトを作ります。
current tab
は Safari の window が持つ Property です。
13 行目
set current tab to firstTab
繰り返しの前に設定した firstTab をアクティブにしています。
「タブの選択」と考えればイメージしやすいと思います。
やったね!
これで先頭のタブがアクティブな状態で、全ての URL がそれぞれのタブで開かれているようになります。
おまけ
Google Chrome で同じ処理
set urls to {"https://www.google.co.jp", "http://www.yahoo.co.jp", "https://www.apple.com"} set countOfUrls to count urls set startTabIndex to 1 (* タブを固定している場合はここの値を変える。固定していなければ 1 でいい *) tell application "Google Chrome" activate tell window 1 set active tab index to startTabIndex repeat with i from 1 to countOfUrls set URL of active tab to (item i of urls) if i = countOfUrls then exit repeat set t to (make new tab) end repeat set active tab index to startTabIndex end tell end tell
リンク
ミレニアム・ファルコン製作日記 #14
14 号 表紙
パーツ
成果
今回の作業は以下の 2 つでした。
- 主船倉ドアのライニング
- 船倉壁(L)を取り付ける
主船倉左側の壁にも環状通路に続く円形ドアがあるので、第 10 号で作業したライニングと同様の作業を行いました。
また、回路端末室に入るための縦長のドアも取り付けています。
回路端末室は、ハン・ソロとレイアが初めてキスをした場所です。
「手が汚れてる」とか「悪党だからホレた」なんて言ってたところです。
このシーンのバックにはしっかりと、この縦長のドアが映っています。
このあとレイアはドアとは反対の方向に逃げて行ってしまいましたが、そちらは一体どこにつながっているんでしょうか。
今後の組み立てで判明するかもしれませんね。
Web 限定プレゼント
今回は Web からの定期購読早期申込みキャンペーンの特典として、オリジナル 作業マット が同梱されていました。
使い道が全然思いつかないけど嬉しい!
それではまた次回。
May the Force be with you!